package top.lyjwn.todo.weinxin.api.url;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.lyjwn.todo.weinxin.WXAppletConfig;
import top.lyjwn.todo.weinxin.param.WXAppletParam;

/**
 * 微信小程序api
 *
 * @author luoyujie
 */
@Component
public class WXAppletUrl {

    @Autowired
    private WXAppletParam wxAppletParam;
    /**
     * 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程
     */
    private String AUTH_CODE2_SESSION = "https://api.weixin.qq.com/sns/jscode2session?appid=#{appid}&secret=#{secret}&js_code=#{JSCODE}&grant_type=authorization_code";

    /**
     * 获取小程序全局唯一后台接口调用凭据（access_token）。调调用绝大多数后台接口时都需使用 access_token，开发者需要进行妥善保存。
     */
    private String AUTH_GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#{appid}&secret=#{secret}";

    /**
     * 组合模板并添加至帐号下的个人模板库
     */
    private String TEMPLATE_MESSAGE_ADD_TEMPLATE = "https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=#{ACCESS_TOKEN}";


    /**
     * 发送客服消息,,弃用
     */
    private String SEND_CUSTOM_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/custom/business/send?access_token=#{ACCESS_TOKEN}";


    /**
     * 发送客服消息给用户。详细规则见
     * 当用户和小程序客服产生特定动作的交互时（具体动作列表请见下方说明），微信将会把消息数据推送给开发者，开发者可以在一段时间内（目前为 48 小时）调用客服接口，通过调用 发送客服消息接口 来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能，方便开发者为用户提供更加优质的服务。
     * <p>
     * 目前允许的动作列表如下，不同动作触发后，允许的客服接口下发消息条数和下发时限不同。
     */
    private String CUSTOMERSERVICEMESSAGE_SEND = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=#{ACCESS_TOKEN}";


    /**
     * 下发统一消息
     * 接口说明
     * 接口英文名
     * sendUniformMessage
     * <p>
     * 功能描述
     * 该接口用于下发小程序和公众号统一的服务消息。
     * <p>
     * 调用方式
     * HTTPS 调用
     */
    private String SEND_UNIFORM_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=#{ACCESS_TOKEN}";


    /**
     * 发送订阅消息
     *
     * 接口应在服务器端调用，详细说明参见服务端API。
     *
     * 本接口支持云调用。需开发者工具版本 >= 1.02.1904090（最新稳定版下载），wx-server-sdk >= 0.4.0
     *
     * 接口说明
     * 接口英文名
     * sendMessage
     *
     * 功能描述
     * 该接口用于发送订阅消息。
     *
     * 调用方式
     * HTTPS 调用
     */
    private String SEND_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=#{ACCESS_TOKEN}";

    private String GET_PHONE_NUMBER = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=#{ACCESS_TOKEN}";

    public String getAUTH_CODE2_SESSION() {
        return AUTH_CODE2_SESSION.replace("#{appid}", wxAppletParam.getAppid()).replace("#{secret}", wxAppletParam.getAppsecret());
    }

    public String getAUTH_GET_ACCESS_TOKEN() {
        return AUTH_GET_ACCESS_TOKEN.replace("#{appid}", wxAppletParam.getAppid()).replace("#{secret}", wxAppletParam.getAppsecret());
    }

    public String getTEMPLATE_MESSAGE_ADD_TEMPLATE() {
        return TEMPLATE_MESSAGE_ADD_TEMPLATE;
    }

    public String getSEND_CUSTOM_MESSAGE() {
        return SEND_CUSTOM_MESSAGE;
    }

    public String getCUSTOMERSERVICEMESSAGE_SEND() {
        return CUSTOMERSERVICEMESSAGE_SEND;
    }

    public String getSEND_UNIFORM_MESSAGE() {
        return SEND_UNIFORM_MESSAGE;
    }

    public String getSEND_MESSAGE() {
        return SEND_MESSAGE;
    }

    public String getGET_PHONE_NUMBER() {
        return GET_PHONE_NUMBER;
    }
}
